package com.lt.service;

import com.lt.dto.*;
import com.lt.entity.Student;

import java.util.List;

/**
 * @Author :liteng
 * @Time : 2023/11/5 21:26
 */
public interface ProjectService {

    /**
     * 获得所有项目
     * 立项审核
     * @return
     */
    List<MyProject> getAllProject();

    /**
     * 项目详情展示页
     * @param projectId
     * @return
     */
    ProjectApply getProjectDetails(Long projectId);

    /**
     * 根据项目编号获取参加项目的学生
     * @param projectId
     * @return
     */
    List<StudentApplyDto> getJoinedStudents(Long projectId);

    /**
     * 根据项目编号获取负责人信息
     * @return
     */
    Student getChargeStu(Long projectId);
    /**
     * 获得项目未通过原因
     * 立项审核
     * @param projectId
     * @return
     */
    String getUnPassedReason(Long projectId);

    /**
     * 获得项目进展记录
     * 进展记录
     * @return
     */
    List<ProgressRecord> getRecords();

    /**
     * 提交中期日志
     * 进展记录
     *
     * @param projectId
     * @param fileId
     */
    void submitLog(Long projectId, Long fileId);


    /**
     * 获取项目中期审核表
     * @return
     */
    List<InterimReviewDto> getReview();

    /**
     * 修改项目成员
     * @param changeMemberDto
     * @return
     */
    Boolean changeMember(ChangeMemberDto changeMemberDto);

    /**
     * 获得中期未通过原因
     * 中期审核
     * @param projectId
     * @return
     */
    String getInterimReason(Long projectId);

    /**
     * 获取结项审核列表
     * @return
     */
    List<ClosingAuditDto> getEndList();

    /**
     * 获得结项未通过原因
     * 中期审核
     * @param projectId
     * @return
     */
    String getEndReason(Long projectId);

    /**
     * 提交结项材料
     * @param closingMaterial
     * @return 是否提交成功
     */
    Boolean closingMaterial(ClosingMaterial closingMaterial);

    /**
     * 提交延期结项
     * @param projectId
     * @return
     */
    Boolean delayedReview(Long projectId,String reason);

    String showEndDetails(Long projectId);

    ClosingAuditDto getEndListOne(Long id);

//    ProjectEnd getEndItem(Long projectId);


    MyProject getMyProjects(Long projectId);
//    Integer getInterimStatus(Long projectId);
}
